package com.atguigu.springboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author : wenchao.long
 * @date : Created in 2020/11/19 16:02 周四
 * @description :
 *         <p>
 *         使用WebMvcConfigurer可以来扩展SpringMVC的功能
 *         高版本的SpringBoot已经废弃 使用继承WebMvcConfigurerAdapter的方法
 *         因为高版本的SpringBoot将原来的WebMvcConfigurer接口方法，变成了默认方法
 *         </p>
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 浏览器发送一个请求会跳转到success
        registry.addViewController("/atguigu").setViewName("success");
        // 所有的WebMvcConfigurerAdapter组件都会一起被调用
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/index.html").setViewName("login");
        registry.addViewController("/main.html").setViewName("dashboard");
    }

    /**
     * 注册拦截器
     *
     * @param registry registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 拦截任意请求 排除掉登录页面和 登录请求
        // 静态资源: *.css *.js
        // SpringBoot已经做好了静态资源映射(但是 2.0+ 版本移除了这个功能 还是需要自己设置
        // 还是要排除掉拦截 /webjars/** 要不然样式还是没有
        registry.addInterceptor(new LoginHandlerInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/index.html", "/", "/user/login", "/webjars/**", "/static/**");
    }

    /**
     * Web自动配置中配置了这个
     * 但是又添加了@ConditionalOnMissingBean
     * 所以我们自己配置了就会覆盖SpringBoot自己的配置
     *
     * @return LocaleResolver
     */
    @Bean
    public LocaleResolver localeResolver() {
        return new LocaleResolverConfig();
    }
}
